import { getToken, setToken, removeToken } from '@/utils/auth'
import { getUserInfoAPI, loginAPI, updateUserPasswordAPI } from '@/api/user'
import { resetRouter } from '@/router'

const actions = {
  /* 登录的action */
  async loginAction(context, loginForm) {
    const loginResult = await loginAPI(loginForm)
    context.commit('setToken', loginResult.data)
    return loginResult
  },
  /* 退出登录的action */
  async logoutAction(context) {
    // 移除本地的token和cookie中的token
    context.commit('removeToken')
    // 清除本地的用户信息
    context.commit('removeUserInfo')
    /* 重置路由(每次用户进来的都是自己的路由，不是残留别人的) */
    resetRouter()
    return '退出成功'
  },
  /* 获取用户基本信息的action */
  async fetchUserInfoAction(context) {
    const { data: userInfo } = await getUserInfoAPI()
    context.commit('setUserInfo', userInfo)
    return userInfo
  },
  /* 修改用户密码的action */
  async updateUserPasswordAction(context, data) {
    await updateUserPasswordAPI(data)
  }
}
const mutations = {
  /* 设置token的mutation */
  setToken(state, token) {
    // 往state中的token字段存储token的值(Vue中数据的存储不是持久化的，页面刷新丢失)
    state.token = token
    // 调用setToken()往cookie中存储token的值(持久化存储)
    setToken(token)
  },
  /* 清除token的mutation */
  removeToken(state) {
    // 清空state中的token字段存储的值
    state.token = ''
    // 调用removeToken()移除cookie中token字段的值
    removeToken()
  },
  /* 设置用户信息的mutation */
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  /* 清除用户信息的mutation */
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const state = () => {
  return {
    // 用户登录后的身份令牌token(调用getToken()读取cookie中的token字段的值如果读取不到则赋值为空字符串)
    token: getToken() || '',
    // 用户的基本信息
    userInfo: {}
  }
}
export default {
  actions,
  mutations,
  state,
  namespaced: true
}
